To solve this optimization problem, we first need to translate the given natural language description into a symbolic representation. This involves defining the variables, the objective function, and the constraints using mathematical notation.

Given:
- Variables: `x0` for hours worked by Peggy, `x1` for hours worked by Bobby.
- Objective Function: Maximize `2*x0 + 7*x1`.
- Constraints:
  - Organization score constraint: `4*x0 + 14*x1 >= 65` and `4*x0 + 14*x1 <= 119`.
  - Work quality rating constraint: `15*x0 + 24*x1 >= 22` and `15*x0 + 24*x1 <= 59`.
  - Paperwork competence rating constraint: `19*x0 + 2*x1 >= 72` and `19*x0 + 2*x1 <= 199`.
  - Additional linear constraint: `-4*x0 + 6*x1 >= 0`.

The symbolic representation of the problem is:
```json
{
  'sym_variables': [('x0', 'hours worked by Peggy'), ('x1', 'hours worked by Bobby')],
  'objective_function': '2*x0 + 7*x1',
  'constraints': [
    '4*x0 + 14*x1 >= 65',
    '4*x0 + 14*x1 <= 119',
    '15*x0 + 24*x1 >= 22',
    '15*x0 + 24*x1 <= 59',
    '19*x0 + 2*x1 >= 72',
    '19*x0 + 2*x1 <= 199',
    '-4*x0 + 6*x1 >= 0'
  ]
}
```

To implement this optimization problem using Gurobi, we will use the Python interface. We'll define the model, variables, objective function, and constraints according to the symbolic representation provided above.

```python
from gurobipy import *

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

# Define the variables
x0 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, name="hours_worked_by_Peggy")
x1 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.INTEGER, name="hours_worked_by_Bobby")

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

# Add constraints
m.addConstr(4*x0 + 14*x1 >= 65, "organization_score_min")
m.addConstr(4*x0 + 14*x1 <= 119, "organization_score_max")
m.addConstr(15*x0 + 24*x1 >= 22, "work_quality_rating_min")
m.addConstr(15*x0 + 24*x1 <= 59, "work_quality_rating_max")
m.addConstr(19*x0 + 2*x1 >= 72, "paperwork_competence_rating_min")
m.addConstr(19*x0 + 2*x1 <= 199, "paperwork_competence_rating_max")
m.addConstr(-4*x0 + 6*x1 >= 0, "additional_linear_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Hours worked by Peggy: {x0.x}")
    print(f"Hours worked by Bobby: {x1.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found")
```