To solve this optimization problem, we first need to identify the decision variables, constraints, and the objective function. 

- **Decision Variables:** Let's denote the number of skirts produced in a week as \(S\) and the number of coats produced in a week as \(C\).
- **Constraints:**
  - Sewing Machine Constraint: \(3S + 2C \leq 25\), because each skirt requires 3 hours on the sewing machine, each coat requires 2 hours, and there are only 25 hours available.
  - Embroidery Machine Constraint: \(5S + 3.5C \leq 35\), because each skirt requires 5 hours on the embroidery machine, each coat requires 3.5 hours, and there are only 35 hours available.
  - Non-Negativity Constraints: \(S \geq 0\) and \(C \geq 0\), because the number of skirts and coats produced cannot be negative.
- **Objective Function:** The profit per skirt is $300, and the profit per coat is $500. Therefore, the total profit \(P\) can be represented as \(P = 300S + 500C\). The goal is to maximize this function.

Given these elements, we can now construct a linear programming model using Gurobi in Python:

```python
from gurobipy import *

# Create a new model
model = Model("Mia_Clothing")

# Define the decision variables
S = model.addVar(vtype=GRB.CONTINUOUS, name="Skirts", lb=0)
C = model.addVar(vtype=GRB.CONTINUOUS, name="Coats", lb=0)

# Define the objective function
model.setObjective(300*S + 500*C, GRB.MAXIMIZE)

# Add constraints
model.addConstr(3*S + 2*C <= 25, "Sewing_Machine_Constraint")
model.addConstr(5*S + 3.5*C <= 35, "Embroidery_Machine_Constraint")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Skirts: {S.x}")
    print(f"Coats: {C.x}")
    print(f"Maximum Profit: ${300*S.x + 500*C.x:.2f}")
else:
    print("No optimal solution found")
```