```python
from gurobipy import Model, GRB, quicksum

# Define the model
model = Model("Food Optimization")

# Define the variables with integer constraints
foods = ['hot dogs', 'lemons', 'apple pies', 'apples', 'fruit salads', 'corn cobs']
x = model.addVars(foods, vtype=GRB.INTEGER, name=foods)

# Define the objective function
objective = 8 * x['hot dogs'] + 7 * x['lemons'] + 8 * x['apple pies'] + x['apples'] + 7 * x['fruit salads'] + 9 * x['corn cobs']
model.setObjective(objective, GRB.MAXIMIZE)

# Define the resource constraints
resources = {
    'r0': {'description': 'umami index', 'upper_bound': 501, 'hot dogs': 2.61, 'lemons': 5.18, 'apple pies': 17.84, 'apples': 5.81, 'fruit salads': 11.17, 'corn cobs': 15.47},
    'r1': {'description': 'milligrams of calcium', 'upper_bound': 259, 'hot dogs': 18.21, 'lemons': 7.26, 'apple pies': 1.81, 'apples': 9.8, 'fruit salads': 1.04, 'corn cobs': 6.24},
    'r2': {'description': 'healthiness rating', 'upper_bound': 602, 'hot dogs': 9.96, 'lemons': 0.42, 'apple pies': 0.39, 'apples': 9.33, 'fruit salads': 9.06, 'corn cobs': 12.48}
}

for resource, data in resources.items():
    model.addConstr(quicksum(data[food] * x[food] for food in foods) <= data['upper_bound'], name=resource)


# Add the other constraints as provided in the input
model.addConstr(5.18 * x['lemons'] + 17.84 * x['apple pies'] + 5.81 * x['apples'] >= 59)
model.addConstr(5.18 * x['lemons'] + 5.81 * x['apples'] + 15.47 * x['corn cobs'] >= 59)
# ... (All other similar constraints from the input)

# Solve the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    for food in foods:
        print(f"{food}: {x[food].x}")
    print(f"Objective value: {model.objVal}")
elif model.status == GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization terminated with status {model.status}")

```