## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a juice store by determining the optimal quantity of two juices, Juice A and Juice B, to produce given the available amounts of raspberries, blueberries, and blackberries.

## Decision Variables

Let \(x\) be the number of units of Juice A to produce, and \(y\) be the number of units of Juice B to produce.

## Objective Function

The profit per unit of Juice A is $5, and the profit per unit of Juice B is $7. The objective is to maximize the total profit \(P\), which can be represented as:
\[P = 5x + 7y\]

## Constraints

1. **Raspberries Constraint**: Juice A uses 20 g of raspberries, and Juice B uses 15 g of raspberries. The store has 2000 g of raspberries available.
\[20x + 15y \leq 2000\]

2. **Blueberries Constraint**: Juice A uses 10 g of blueberries, and Juice B uses 15 g of blueberries. The store has 1500 g of blueberries available.
\[10x + 15y \leq 1500\]

3. **Blackberries Constraint**: Juice A uses 10 g of blackberries, and Juice B uses 5 g of blackberries. The store has 1400 g of blackberries available.
\[10x + 5y \leq 1400\]

4. **Non-Negativity Constraints**: The number of units of each juice to produce cannot be negative.
\[x \geq 0, y \geq 0\]

## Gurobi Code

To solve this problem using Gurobi in Python, we can use the following code:

```python
import gurobi

def solve_juice_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the decision variables
    x = model.addVar(name="Juice_A", lb=0, ub=gurobi.GRB.INFINITY, obj=5)
    y = model.addVar(name="Juice_B", lb=0, ub=gurobi.GRB.INFINITY, obj=7)

    # Raspberries constraint
    model.addConstr(20*x + 15*y <= 2000, name="Raspberries_Constraint")

    # Blueberries constraint
    model.addConstr(10*x + 15*y <= 1500, name="Blueberries_Constraint")

    # Blackberries constraint
    model.addConstr(10*x + 5*y <= 1400, name="Blackberries_Constraint")

    # Set the objective function
    model.setObjective(5*x + 7*y, gurobi.GRB.MAXIMIZE)

    # Optimize the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: x = {x.varValue}, y = {y.varValue}")
        print(f"Maximum profit: ${5*x.varValue + 7*y.varValue:.2f}")
    else:
        print("The model is infeasible.")

solve_juice_problem()
```

This code defines the problem in Gurobi, solves it, and prints out the optimal quantities of Juice A and Juice B to produce, along with the maximum achievable profit. If the problem is infeasible (i.e., there is no solution that satisfies all the constraints), it will indicate that as well.