To solve this optimization problem, we first need to convert the natural language description into a symbolic representation. Let's denote the number of internet services installed as $x_1$ and the number of TV services installed as $x_2$. The objective is to maximize profit, with each internet service installation yielding a profit of $100 and each TV service installation yielding a profit of $120.

The symbolic representation of the problem can be described as follows:
```json
{
    'sym_variables': [('x1', 'number of internet services installed'), 
                      ('x2', 'number of TV services installed')],
    'objective_function': '100*x1 + 120*x2',
    'constraints': ['60*x1 + 50*x2 <= 7000', 
                    '10*x1 + 20*x2 <= 4000', 
                    'x1 >= 0', 
                    'x2 >= 0']
}
```
This representation includes the symbolic variables $x_1$ and $x_2$, the objective function to maximize profit, and the constraints based on the available wiring time, box installation time, and non-negativity of the number of installations.

Now, let's translate this into Gurobi code in Python:
```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(name="Internet_Services", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="TV_Services", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(100*x1 + 120*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(60*x1 + 50*x2 <= 7000, name="Wiring_Time_Constraint")
m.addConstr(10*x1 + 20*x2 <= 4000, name="Box_Installation_Time_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of Internet Services: {x1.x}")
    print(f"Number of TV Services: {x2.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```