To solve the given optimization problem, we first need to define the symbolic representation of the variables and the objective function, followed by the constraints. The variables are 'dish soap bottles' and 'rubber gloves', which we will represent symbolically as `x0` and `x1`, respectively.

The objective function is to maximize 5 times the number of dish soap bottles added to 7 times the total number of rubber gloves. Symbolically, this can be represented as `5*x0 + 7*x1`.

Now, let's list out the constraints based on the problem description:
- The total value of dish soap bottles plus rubber gloves must be at least $5: `5.18*x0 + 7.26*x1 >= 5`
- The total value of dish soap bottles plus rubber gloves has to be no greater than $21: `5.18*x0 + 7.26*x1 <= 21`
- You must use at least 11 ft^2 of storage space on dish soap bottles, and rubber gloves: `5.67*x0 + 6.51*x1 >= 11`
- Dish soap bottles and rubber gloves must occupy no more than 27 square feet of storage space: `5.67*x0 + 6.51*x1 <= 27`
- Four times the number of dish soap bottles, plus -7 times the number of rubber gloves has to be no less than zero: `4*x0 - 7*x1 >= 0`
- Dish soap bottles and rubber gloves must be whole numbers: `x0` and `x1` are integers.

Given this information, we can now create a symbolic representation of the problem:

```json
{
    'sym_variables': [('x0', 'dish soap bottles'), ('x1', 'rubber gloves')],
    'objective_function': '5*x0 + 7*x1',
    'constraints': [
        '5.18*x0 + 7.26*x1 >= 5',
        '5.18*x0 + 7.26*x1 <= 21',
        '5.67*x0 + 6.51*x1 >= 11',
        '5.67*x0 + 6.51*x1 <= 27',
        '4*x0 - 7*x1 >= 0'
    ]
}
```

Now, let's write the Gurobi code to solve this optimization problem:

```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Add variables to the model
x0 = m.addVar(vtype=GRB.INTEGER, name="dish_soap_bottles")
x1 = m.addVar(vtype=GRB.INTEGER, name="rubber_gloves")

# Set the objective function
m.setObjective(5*x0 + 7*x1, GRB.MAXIMIZE)

# Add constraints to the model
m.addConstr(5.18*x0 + 7.26*x1 >= 5, "total_value_at_least_5")
m.addConstr(5.18*x0 + 7.26*x1 <= 21, "total_value_no_more_than_21")
m.addConstr(5.67*x0 + 6.51*x1 >= 11, "storage_space_at_least_11")
m.addConstr(5.67*x0 + 6.51*x1 <= 27, "storage_space_no_more_than_27")
m.addConstr(4*x0 - 7*x1 >= 0, "dish_soap_bottles_vs_rubber_gloves")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Dish soap bottles: {x0.x}")
    print(f"Rubber gloves: {x1.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found")
```