## Step 1: Define the optimization problem
The goal is to maximize the objective function: $9.62x_0 + 6.74x_1 + 7.61x_2$, where $x_0$, $x_1$, and $x_2$ represent the hours worked by Bill, Mary, and Hank, respectively.

## Step 2: List all the constraints
The constraints are as follows:
- $9.76x_0 \leq 125$
- $4.81x_0 \leq 97$
- $10.28x_0 \leq 133$
- $0.62x_0 \leq 112$
- $5.35x_0 \leq 111$
- $11.19x_1 \leq 125$
- $10.91x_1 \leq 97$
- $0.89x_1 \leq 133$
- $11.77x_1 \leq 112$
- $8.39x_1 \leq 111$
- $9.05x_2 \leq 125$
- $7.87x_2 \leq 97$
- $11.33x_2 \leq 133$
- $8.79x_2 \leq 112$
- $11.28x_2 \leq 111$
- $4.81x_0 + 10.91x_1 \geq 18$
- $4.81x_0 + 10.91x_1 + 7.87x_2 \geq 18$
- $10.28x_0 + 0.89x_1 + 11.33x_2 \geq 34$
- $0.62x_0 + 8.79x_2 \geq 14$
- $11.77x_1 + 8.79x_2 \geq 37$
- $5.35x_0 + 8.39x_1 + 11.28x_2 \geq 28$
- $11.19x_1 + 9.05x_2 \leq 75$
- $9.76x_0 + 11.19x_1 + 9.05x_2 \leq 75$
- $4.81x_0 + 7.87x_2 \leq 51$
- $4.81x_0 + 10.91x_1 + 7.87x_2 \leq 51$
- $10.28x_0 + 11.33x_2 \leq 83$
- $0.89x_1 + 11.33x_2 \leq 64$
- $10.28x_0 + 0.89x_1 + 11.33x_2 \leq 64$
- $0.62x_0 + 8.79x_2 \leq 38$
- $11.77x_1 + 8.79x_2 \leq 86$
- $0.62x_0 + 11.77x_1 + 8.79x_2 \leq 86$
- $5.35x_0 + 8.39x_1 \leq 105$
- $5.35x_0 + 11.28x_2 \leq 110$
- $5.35x_0 + 8.39x_1 + 11.28x_2 \leq 110$

## Step 3: Implement the optimization problem using Gurobi
We will use the Gurobi Python library to model and solve this optimization problem.

```python
import gurobi as gp

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

# Define the variables
x0 = m.addVar(name="hours_worked_by_Bill", lb=0)  # hours worked by Bill
x1 = m.addVar(name="hours_worked_by_Mary", lb=0)  # hours worked by Mary
x2 = m.addVar(name="hours_worked_by_Hank", lb=0)  # hours worked by Hank

# Define the objective function
m.setObjective(9.62*x0 + 6.74*x1 + 7.61*x2, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(9.76*x0 <= 125)
m.addConstr(4.81*x0 <= 97)
m.addConstr(10.28*x0 <= 133)
m.addConstr(0.62*x0 <= 112)
m.addConstr(5.35*x0 <= 111)

m.addConstr(11.19*x1 <= 125)
m.addConstr(10.91*x1 <= 97)
m.addConstr(0.89*x1 <= 133)
m.addConstr(11.77*x1 <= 112)
m.addConstr(8.39*x1 <= 111)

m.addConstr(9.05*x2 <= 125)
m.addConstr(7.87*x2 <= 97)
m.addConstr(11.33*x2 <= 133)
m.addConstr(8.79*x2 <= 112)
m.addConstr(11.28*x2 <= 111)

m.addConstr(4.81*x0 + 10.91*x1 >= 18)
m.addConstr(4.81*x0 + 10.91*x1 + 7.87*x2 >= 18)
m.addConstr(10.28*x0 + 0.89*x1 + 11.33*x2 >= 34)
m.addConstr(0.62*x0 + 8.79*x2 >= 14)
m.addConstr(11.77*x1 + 8.79*x2 >= 37)
m.addConstr(5.35*x0 + 8.39*x1 + 11.28*x2 >= 28)

m.addConstr(11.19*x1 + 9.05*x2 <= 75)
m.addConstr(9.76*x0 + 11.19*x1 + 9.05*x2 <= 75)
m.addConstr(4.81*x0 + 7.87*x2 <= 51)
m.addConstr(4.81*x0 + 10.91*x1 + 7.87*x2 <= 51)

m.addConstr(10.28*x0 + 11.33*x2 <= 83)
m.addConstr(0.89*x1 + 11.33*x2 <= 64)
m.addConstr(10.28*x0 + 0.89*x1 + 11.33*x2 <= 64)

m.addConstr(0.62*x0 + 8.79*x2 <= 38)
m.addConstr(11.77*x1 + 8.79*x2 <= 86)
m.addConstr(0.62*x0 + 11.77*x1 + 8.79*x2 <= 86)

m.addConstr(5.35*x0 + 8.39*x1 <= 105)
m.addConstr(5.35*x0 + 11.28*x2 <= 110)
m.addConstr(5.35*x0 + 8.39*x1 + 11.28*x2 <= 110)

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Objective: ", m.objVal)
    print("Hours worked by Bill: ", x0.varValue)
    print("Hours worked by Mary: ", x1.varValue)
    print("Hours worked by Hank: ", x2.varValue)
else:
    print("The model is infeasible")
```