To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. Let's denote:

- $x_1$ as the number of bags of Drummondville blend.
- $x_2$ as the number of bags of Victoriaville blend.

The objective function is to maximize profits. Given that the profit from each bag of Drummondville sold is $5 and from each bag of Victoriaville blend sold is $7, we can write the objective function as:

Maximize: $5x_1 + 7x_2$

Now, let's consider the constraints based on the available stock of arabica and robusta beans. 

- Each bag of Drummondville blend contains 600 grams of arabica beans.
- Each bag of Victoriaville blend contains 375 grams of arabica beans.
- The total production must not exceed 24,000 grams of arabica beans.

This gives us the first constraint:

$600x_1 + 375x_2 \leq 24000$

Similarly, for robusta beans:

- Each bag of Drummondville blend contains 400 grams of robusta beans.
- Each bag of Victoriaville blend contains 625 grams of robusta beans.
- The total production must not exceed 17,000 grams of robusta beans.

This gives us the second constraint:

$400x_1 + 625x_2 \leq 17000$

Additionally, we have non-negativity constraints since the number of bags cannot be negative:

$x_1 \geq 0$
$x_2 \geq 0$

Thus, our symbolic representation is:
```json
{
    'sym_variables': [('x1', 'number of bags of Drummondville blend'), ('x2', 'number of bags of Victoriaville blend')],
    'objective_function': '5*x1 + 7*x2',
    'constraints': ['600*x1 + 375*x2 <= 24000', '400*x1 + 625*x2 <= 17000', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this optimization problem using Gurobi in Python, we use the following code:
```python
from gurobipy import *

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

# Add variables to the model
x1 = m.addVar(name="Drummondville", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="Victoriaville", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(5*x1 + 7*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(600*x1 + 375*x2 <= 24000, name="ArabicaConstraint")
m.addConstr(400*x1 + 625*x2 <= 17000, name="RobustaConstraint")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Drummondville: {x1.x}")
    print(f"Victoriaville: {x2.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```