## Symbolic Representation

Let's denote the number of skirts produced as $x_1$ and the number of coats produced as $x_2$. The profit per skirt is $300 and the profit per coat is $500. The goal is to maximize the total profit.

The symbolic representation of the problem is:

```json
{
    'sym_variables': [('x1', 'skirts'), ('x2', 'coats')],
    'objective_function': '300*x1 + 500*x2',
    'constraints': [
        '3*x1 + 2*x2 <= 25',  // sewing machine constraint
        '5*x1 + 3.5*x2 <= 35',  // embroidery machine constraint
        'x1 >= 0',  // non-negativity constraint for skirts
        'x2 >= 0'  // non-negativity constraint for coats
    ]
}
```

## Gurobi Code

Here is the Gurobi code to solve the optimization problem:

```python
import gurobi

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

    # Define the variables
    x1 = model.addVar(lb=0, name="skirts")  # number of skirts
    x2 = model.addVar(lb=0, name="coats")  # number of coats

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

    # Define the constraints
    model.addConstr(3 * x1 + 2 * x2 <= 25, name="sewing_machine_constraint")
    model.addConstr(5 * x1 + 3.5 * x2 <= 35, name="embroidery_machine_constraint")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal production levels:")
        print(f"Skirts: {x1.varValue}")
        print(f"Coats: {x2.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_production_problem()
```