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

Let's denote:
- $B$ as the number of stuffed beavers made,
- $R$ as the number of stuffed bears made.

The objective is to maximize profit. The profit per beaver is $5, and the profit per bear is $7. Thus, the total profit can be represented by the function: $5B + 7R$.

There are two main constraints:
1. Time constraint: Each beaver takes 10 minutes to make, and each bear takes 15 minutes to make. The company has 2000 minutes available. This can be represented as: $10B + 15R \leq 2000$.
2. Ratio constraint: The company must make at least three times as many beavers as bears, which can be represented as: $B \geq 3R$.

Additionally, the number of beavers and bears cannot be negative, so we have:
- $B \geq 0$
- $R \geq 0$

Now, let's translate these into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
B = model.addVar(vtype=GRB.INTEGER, name="Beavers")
R = model.addVar(vtype=GRB.INTEGER, name="Bears")

# Set the objective function to maximize profit
model.setObjective(5*B + 7*R, GRB.MAXIMIZE)

# Add constraints
model.addConstr(10*B + 15*R <= 2000, "Time_Constraint")
model.addConstr(B >= 3*R, "Ratio_Constraint")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Beavers to make: {B.x}")
    print(f"Bears to make: {R.x}")
    print(f"Maximum Profit: {5*B.x + 7*R.x}")
else:
    print("No optimal solution found")

```