To solve the given optimization problem using Gurobi, we first need to understand and possibly simplify or reorganize the constraints and objective function as provided.

The objective function is to maximize: \(9 \times \text{hours worked by Jean} + 7 \times \text{hours worked by Laura} + 5 \times \text{hours worked by Hank}\).

Given constraints:
- Total combined paperwork competence rating from all workers must be at least 118.
- Total combined productivity rating from Laura and Hank must be at least 41.
- Total combined productivity rating from Jean and Laura must be at least 67.
- Total combined productivity rating from Jean and Hank must be at least 48.
- Total combined productivity rating from all workers must be at least 65.
- The total combined paperwork competence rating from Jean and Laura must be less than or equal to 195.
- The total combined paperwork competence rating from all workers must be less than or equal to 195 (this is redundant given the previous constraint since it includes all workers, but we'll consider it as part of the model for completeness).
- Total combined productivity rating from Jean and Hank should be less than or equal to 152.
- Total combined productivity rating from Laura and Hank has to be less than or equal to 164.
- Total combined productivity rating from Jean and Laura must be less than or equal to 143.
- Total combined productivity rating from all workers should be less than or equal to 143.

Let's represent the hours worked by each person as \(J\) for Jean, \(L\) for Laura, and \(H\) for Hank. The paperwork competence ratings are given as 22 for Jean, 20 for Laura, and 25 for Hank. Productivity ratings are 14 for Jean, 22 for Laura, and 23 for Hank.

We will use Gurobi's Python interface to model this problem.

```python
from gurobipy import *

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

# Define variables
J = m.addVar(vtype=GRB.CONTINUOUS, name="hours_worked_by_Jean")
L = m.addVar(vtype=GRB.CONTINUOUS, name="hours_worked_by_Laura")
H = m.addVar(vtype=GRB.CONTINUOUS, name="hours_worked_by_Hank")

# Objective function
m.setObjective(9*J + 7*L + 5*H, GRB.MAXIMIZE)

# Constraints
# Paperwork competence constraints
m.addConstr(22*J + 20*L + 25*H >= 118, "total_paperwork_competence")
m.addConstr(22*J + 20*L <= 195, "paperwork_JL")
m.addConstr(22*J + 20*L + 25*H <= 195, "total_paperwork")

# Productivity constraints
m.addConstr(22*L + 23*H >= 41, "productivity_LH_min")
m.addConstr(14*J + 22*L >= 67, "productivity_JL_min")
m.addConstr(14*J + 23*H >= 48, "productivity_JH_min")
m.addConstr(14*J + 22*L + 23*H >= 65, "total_productivity_min")

m.addConstr(14*J + 23*H <= 152, "productivity_JH_max")
m.addConstr(22*L + 23*H <= 164, "productivity_LH_max")
m.addConstr(14*J + 22*L <= 143, "productivity_JL_max")
m.addConstr(14*J + 22*L + 23*H <= 143, "total_productivity_max")

# Solve the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Hours worked by Jean: {J.x}")
    print(f"Hours worked by Laura: {L.x}")
    print(f"Hours worked by Hank: {H.x}")
else:
    print("No optimal solution found")
```