```python
import gurobipy as gp
from gurobipy import GRB

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

# Create variables
zinc = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="zinc")
vitamin_b6 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="vitamin_b6")
vitamin_c = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="vitamin_c")
calcium = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="calcium")
carbohydrates = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="carbohydrates")
protein = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="protein")
iron = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="iron")

# Set objective function
m.setObjective(9.89 * zinc + 1.51 * vitamin_b6 + 2.87 * vitamin_c + 4.27 * calcium + 6.7 * carbohydrates + 7.82 * protein + 8.78 * iron, GRB.MINIMIZE)

# Resource constraints
resources = {
    'r0': {'upper_bound': 206, 'x0': 5, 'x1': 6, 'x2': 3, 'x3': 6, 'x4': 6, 'x5': 5, 'x6': 5},
    'r1': {'upper_bound': 89, 'x0': 7, 'x1': 6, 'x2': 4, 'x3': 3, 'x4': 3, 'x5': 2, 'x6': 4},
    'r2': {'upper_bound': 223, 'x0': 1, 'x1': 1, 'x2': 8, 'x3': 4, 'x4': 1, 'x5': 4, 'x6': 3}
}

for r_key, r_data in resources.items():
    m.addConstr(r_data['x0'] * zinc + r_data['x1'] * vitamin_b6 + r_data['x2'] * vitamin_c + r_data['x3'] * calcium + r_data['x4'] * carbohydrates + r_data['x5'] * protein + r_data['x6'] * iron <= r_data['upper_bound'], name=f"{r_key}_ub")


# Add other constraints (provided in the input)
# Immune support index constraints
m.addConstr(6 * carbohydrates + 5 * iron >= 11)
m.addConstr(6 * calcium + 6 * carbohydrates >= 24)
# ... (add all other immune, digestive, and cardiovascular support index constraints)

# Additional constraints
m.addConstr(-1 * vitamin_b6 + 8 * calcium >= 0)
m.addConstr(-5 * zinc + 7 * iron >= 0)
m.addConstr(3 * vitamin_c - 1 * carbohydrates + 5 * protein >= 0)

# Upper bound constraints (immune)
m.addConstr(6 * carbohydrates + 5 * protein <= 206)
# ... (add all other upper bound constraints for immune, digestive, and cardiovascular)


# Optimize model
m.optimize()

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

```