To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. Let's denote the number of engineers as $x_1$ and the number of interns as $x_2$. The objective is to minimize the total weekly payroll.

The symbolic representation of the variables and the objective function can be described as follows:

```json
{
  'sym_variables': [('x1', 'number of engineers'), ('x2', 'number of interns')],
  'objective_function': '3000*x1 + 750*x2',
  'constraints': ['x1 + x2 >= 100', 'x2 >= 20', 'x2 >= (1/3)*x1', '3000*x1 + 750*x2 <= 200000', 'x1 >= 0', 'x2 >= 0']
}
```

This representation captures the problem's requirements:
- $x_1$ represents the number of engineers.
- $x_2$ represents the number of interns.
- The objective function $3000*x1 + 750*x2$ aims to minimize the total weekly payroll.
- The constraints ensure that:
  - The total number of workers is at least 100 ($x1 + x2 >= 100$).
  - There are at least 20 interns ($x2 >= 20$).
  - The number of interns is at least a third of the number of engineers ($x2 >= (1/3)*x1$).
  - The total weekly payroll does not exceed $200,000 ($3000*x1 + 750*x2 <= 200000$).
  - Both $x_1$ and $x_2$ are non-negative, as they represent counts of people.

Now, let's implement this optimization problem using Gurobi in Python:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="number_of_engineers")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="number_of_interns")

# Set the objective function
m.setObjective(3000*x1 + 750*x2, GRB.MINIMIZE)

# Add constraints
m.addConstr(x1 + x2 >= 100, "total_workers")
m.addConstr(x2 >= 20, "min_interns")
m.addConstr(x2 >= (1/3)*x1, "intern_to_engineer_ratio")
m.addConstr(3000*x1 + 750*x2 <= 200000, "max_payroll")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of Engineers: {x1.x}")
    print(f"Number of Interns: {x2.x}")
    print(f"Total Payroll: ${3000*x1.x + 750*x2.x}")
else:
    print("No optimal solution found")
```