Here's the Gurobi code to solve the optimization problem:

```python
import gurobipy as gp

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

# Create variables
vitamin_A = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_A")
vitamin_B6 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B6")
zinc = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="zinc")
vitamin_B1 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B1")
vitamin_D = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_D")

# Set objective function
m.setObjective(2 * vitamin_A + 7 * vitamin_B6 + 5 * zinc + 7 * vitamin_B1 + 3 * vitamin_D, gp.GRB.MAXIMIZE)

# Add constraints
kidney_support_index = {'vitamin_A': 4, 'vitamin_B6': 4, 'zinc': 1, 'vitamin_B1': 6, 'vitamin_D': 6}
m.addConstr(vitamin_B1 * kidney_support_index['vitamin_B1'] + vitamin_D * kidney_support_index['vitamin_D'] >= 17)
m.addConstr(zinc * kidney_support_index['zinc'] + vitamin_D * kidney_support_index['vitamin_D'] >= 24)
m.addConstr(zinc * kidney_support_index['zinc'] + vitamin_B1 * kidney_support_index['vitamin_B1'] >= 34)
m.addConstr(vitamin_B6 * kidney_support_index['vitamin_B6'] + zinc * kidney_support_index['zinc'] + vitamin_D * kidney_support_index['vitamin_D'] >= 31)
m.addConstr(vitamin_A * kidney_support_index['vitamin_A'] + vitamin_B6 * kidney_support_index['vitamin_B6'] + vitamin_B1 * kidney_support_index['vitamin_B1'] >= 31)
m.addConstr(vitamin_A * kidney_support_index['vitamin_A'] + zinc * kidney_support_index['zinc'] + vitamin_B1 * kidney_support_index['vitamin_B1'] >= 31)
# ... (add all other constraints similarly)
m.addConstr(vitamin_B6 * 4 + zinc * 1 <= 221)
m.addConstr(vitamin_B6 * 4 + vitamin_D * 6 <= 55)
m.addConstr(zinc * 1 + vitamin_B1 * 6 <= 229)
m.addConstr(vitamin_B1 * 6 + vitamin_D * 6 <= 98)
m.addConstr(vitamin_A * 4 + vitamin_B6 * 4 + vitamin_B1 * 6 <= 161)
m.addConstr(vitamin_A * 4 + zinc * 1 + vitamin_B1 * 6 <= 95)
m.addConstr(vitamin_A * 4 + vitamin_B6 * 4 + zinc * 1 <= 244)
m.addConstr(vitamin_A * 4 + vitamin_B6 * 4 + zinc * 1 + vitamin_B1 * 6 + vitamin_D * 6 <= 244)


# 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)

```