To solve this optimization problem, we need to formulate it as a linear programming model. The goal is to maximize profit by determining how many foldable and electric scooters should be produced per month.

Let's define two decision variables:
- $x_1$: Number of foldable scooters produced per month
- $x_2$: Number of electric scooters produced per month

The objective function, which represents the total profit to be maximized, can be written as:
\[ \text{Maximize:} \quad 150x_1 + 200x_2 \]

Now, let's consider the constraints. Each type of scooter requires time from both the design and engineering teams, and there are limits on how many hours each team can work per month.

- Design Team Constraint: $1.5x_1 + 3x_2 \leq 4000$
- Engineering Team Constraint: $4x_1 + 6x_2 \leq 5000$

Additionally, the number of scooters produced cannot be negative:
\[ x_1 \geq 0, \quad x_2 \geq 0 \]

With these equations, we can now express this problem in Gurobi code using Python.

```python
from gurobipy import *

# Create a new model
m = Model("Scooter_Production")

# Define the decision variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="foldable_scooters")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="electric_scooters")

# Set the objective function: Maximize profit
m.setObjective(150*x1 + 200*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(1.5*x1 + 3*x2 <= 4000, "design_team_hours")
m.addConstr(4*x1 + 6*x2 <= 5000, "engineering_team_hours")

# Optimize the model
m.optimize()

# Print the results
for v in m.getVars():
    print(f"{v.varName}: {v.x}")
print(f"Objective (Max Profit): {m.objVal}")
```