```json
{
  "sym_variables": [
    ("x0", "hot dogs"),
    ("x1", "slices of pizza"),
    ("x2", "chicken drumsticks")
  ],
  "objective_function": "2*x0 + 9*x1 + 6*x2",
  "constraints": [
    "0.69*x0 + 3.25*x1 + 1.51*x2 >= 11",
    "2.7*x0 + 2.23*x1 >= 5",
    "1.64*x0 + 3.26*x1 + 4.61*x2 >= 10",
    "4.59*x0 + 0.72*x1 + 3.06*x2 >= 10",
    "0.94*x1 + 0.45*x2 <= 37",
    "4.97*x0 + 0.45*x2 <= 41",
    "4.97*x0 + 0.94*x1 <= 28",
    "4.97*x0 + 0.94*x1 + 0.45*x2 <= 28",
    "0.69*x0 + 1.51*x2 <= 41",
    "3.25*x1 + 1.51*x2 <= 29",
    "0.69*x0 + 3.25*x1 + 1.51*x2 <= 29",
    "2.23*x1 + 4.0*x2 <= 18",
    "2.7*x0 + 2.23*x1 + 4.0*x2 <= 18",
    "3.26*x1 + 4.61*x2 <= 22",
    "1.64*x0 + 4.61*x2 <= 26",
    "1.64*x0 + 3.26*x1 + 4.61*x2 <= 26",
    "4.59*x0 + 0.72*x1 <= 18",
    "0.72*x1 + 3.06*x2 <= 25",
    "4.59*x0 + 0.72*x1 + 3.06*x2 <= 25",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0"
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("food_optimization")

# Create variables
hot_dogs = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="hot_dogs")
pizza_slices = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="pizza_slices")
chicken_drumsticks = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="chicken_drumsticks")


# Set objective function
m.setObjective(2 * hot_dogs + 9 * pizza_slices + 6 * chicken_drumsticks, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(0.69 * hot_dogs + 3.25 * pizza_slices + 1.51 * chicken_drumsticks >= 11, "healthiness_min")
m.addConstr(2.7 * hot_dogs + 2.23 * pizza_slices >= 5, "carbs_min_hd_ps")
m.addConstr(1.64 * hot_dogs + 3.26 * pizza_slices + 4.61 * chicken_drumsticks >= 10, "protein_min")
m.addConstr(4.59 * hot_dogs + 0.72 * pizza_slices + 3.06 * chicken_drumsticks >= 10, "iron_min")
m.addConstr(0.94 * pizza_slices + 0.45 * chicken_drumsticks <= 37, "fat_max_ps_cd")
m.addConstr(4.97 * hot_dogs + 0.45 * chicken_drumsticks <= 41, "fat_max_hd_cd")
m.addConstr(4.97 * hot_dogs + 0.94 * pizza_slices <= 28, "fat_max_hd_ps")
m.addConstr(4.97 * hot_dogs + 0.94 * pizza_slices + 0.45 * chicken_drumsticks <= 28, "fat_max")
m.addConstr(0.69 * hot_dogs + 1.51 * chicken_drumsticks <= 41, "healthiness_max_hd_cd")
m.addConstr(3.25 * pizza_slices + 1.51 * chicken_drumsticks <= 29, "healthiness_max_ps_cd")
m.addConstr(0.69 * hot_dogs + 3.25 * pizza_slices + 1.51 * chicken_drumsticks <= 29, "healthiness_max")
m.addConstr(2.23 * pizza_slices + 4.0 * chicken_drumsticks <= 18, "carbs_max_ps_cd")
m.addConstr(2.7 * hot_dogs + 2.23 * pizza_slices + 4.0 * chicken_drumsticks <= 18, "carbs_max")
m.addConstr(3.26 * pizza_slices + 4.61 * chicken_drumsticks <= 22, "protein_max_ps_cd")
m.addConstr(1.64 * hot_dogs + 4.61 * chicken_drumsticks <= 26, "protein_max_hd_cd")
m.addConstr(1.64 * hot_dogs + 3.26 * pizza_slices + 4.61 * chicken_drumsticks <= 26, "protein_max")
m.addConstr(4.59 * hot_dogs + 0.72 * pizza_slices <= 18, "iron_max_hd_ps")
m.addConstr(0.72 * pizza_slices + 3.06 * chicken_drumsticks <= 25, "iron_max_ps_cd")
m.addConstr(4.59 * hot_dogs + 0.72 * pizza_slices + 3.06 * chicken_drumsticks <= 25, "iron_max")


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status %d" % m.status)

```