To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of leather chairs as \(L\) and the number of mesh chairs as \(M\).

The profit per leather chair is $250, and the profit per mesh chair is $200. Therefore, the total profit can be represented as \(250L + 200M\).

The cost of a leather chair is $500, and the cost of a mesh chair is $300. The store does not want to invest more than $50,000 on chairs. This constraint can be represented as \(500L + 300M \leq 50,000\).

Additionally, the store estimates a monthly demand of at most 125 chairs. This gives us another constraint: \(L + M \leq 125\).

Both \(L\) and \(M\) must be non-negative since we cannot sell a negative number of chairs.

Now, let's translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
L = m.addVar(vtype=GRB.INTEGER, name="Leather_Chairs")
M = m.addVar(vtype=GRB.INTEGER, name="Mesh_Chairs")

# Set the objective function to maximize profit
m.setObjective(250*L + 200*M, GRB.MAXIMIZE)

# Add constraints
m.addConstr(500*L + 300*M <= 50000, "Budget_Constraint")
m.addConstr(L + M <= 125, "Demand_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of Leather Chairs: {L.x}")
    print(f"Number of Mesh Chairs: {M.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")

```