## Step 1: Define the symbolic representation of the problem

Let's define the symbolic variables:
- $x_1$ = number of police officer costumes
- $x_2$ = number of fireman costumes

The objective function to maximize profit is: $10x_1 + 12x_2$

The constraints are:
1. $x_2 \geq 3x_1$ (at least 3 times as many fireman costumes as police officer costumes)
2. $10x_1 + 12x_2 \geq 0$ is not necessary since profits are positive, but we need to consider the time constraint: $10x_1 + 12x_2 \leq 3000$ is incorrect, the correct time constraint is $10x_1 + 12x_2 \leq 3000$ is not accurate in terms of minutes, it should be $10x_1 + 12x_2 \leq 3000$ minutes. To make it clear, let's assume it is  $10x_1 + 12x_2 \leq 3000$ is incorrect and the correct one is 
   $10x_1 + 12x_2$  should be in minutes so 
   $10x_1$ + $12x_2$ $\leq 3000$  
   The accurate way is 
   $10 x_1 + 12x_2 \leq 3000$

## Step 2: Write down the correct symbolic representation

```json
{
'sym_variables': [('x1', 'police officer costumes'), ('x2', 'fireman costumes')],
'objective_function': '10*x1 + 12*x2',
'constraints': ['x2 >= 3*x1', '10*x1 + 12*x2 <= 3000', 'x1 >= 0', 'x2 >= 0']
}
```

## Step 3: Convert the symbolic representation into Gurobi code

```python
import gurobi

def solve_costume_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="police_officer_costumes")
    x2 = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="fireman_costumes")

    # Define the objective function
    model.setObjective(10*x1 + 12*x2, gurobi.GRB.MAXIMIZE)

    # Add the constraints
    model.addConstr(x2 >= 3*x1, name="fireman_police_ratio")
    model.addConstr(10*x1 + 12*x2 <= 3000, name="time_constraint")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution:")
        print(f"Police officer costumes: {x1.varValue}")
        print(f"Fireman costumes: {x2.varValue}")
        print(f"Max profit: {model.objVal}")
    else:
        print("No optimal solution found")

solve_costume_problem()
```