To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints using algebraic notation.

### Symbolic Representation:

Let's define:
- $x_0$ as the number of airborne infantry companies,
- $x_1$ as the number of engineer platoons.

The objective function is to minimize: $2.27x_0 + 4.98x_1$

Constraints are as follows:
1. Logistics footprint constraint: $10x_0 + 4x_1 \geq 28$
2. Minimum logistics footprint constraint: This is already covered by the first constraint.
3. Combined logistical capacity constraint: $8x_0 + 10x_1 \geq 34$
4. Another combined logistical capacity constraint: This is essentially the same as the third constraint.
5. Combined mobility rating constraint: $6x_0 + 6x_1 \geq 41$
6. Another combined mobility rating constraint: This repeats the fifth constraint.
7. Specific linear constraint: $6x_0 - 4x_1 \geq 0$
8. Maximum logistics footprint constraint: $10x_0 + 4x_1 \leq 55$
9. Combined logistical capacity upper limit: $8x_0 + 10x_1 \leq 69$
10. Combined mobility rating upper limit: $6x_0 + 6x_1 \leq 115$
11. Integer constraint for airborne infantry companies: $x_0 \in \mathbb{Z}$
12. Non-negativity and integer constraint for engineer platoons: $x_1 \in \mathbb{Z}$, $x_1 \geq 0$ (implied but not explicitly stated in all constraints)

Given the above, we can represent our problem symbolically as:
```json
{
    'sym_variables': [('x0', 'airborne infantry companies'), ('x1', 'engineer platoons')],
    'objective_function': '2.27*x0 + 4.98*x1',
    'constraints': [
        '10*x0 + 4*x1 >= 28',
        '8*x0 + 10*x1 >= 34',
        '6*x0 + 6*x1 >= 41',
        '6*x0 - 4*x1 >= 0',
        '10*x0 + 4*x1 <= 55',
        '8*x0 + 10*x1 <= 69',
        '6*x0 + 6*x1 <= 115'
    ]
}
```

### Gurobi Code:

Now, let's write the Gurobi code to solve this optimization problem:
```python
from gurobipy import *

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

# Add variables
x0 = m.addVar(vtype=GRB.INTEGER, name="airborne_infantry_companies")
x1 = m.addVar(vtype=GRB.INTEGER, name="engineer_platoons")

# Set objective function
m.setObjective(2.27*x0 + 4.98*x1, GRB.MINIMIZE)

# Add constraints
m.addConstr(10*x0 + 4*x1 >= 28, "logistics_footprint")
m.addConstr(8*x0 + 10*x1 >= 34, "combined_logistical_capacity")
m.addConstr(6*x0 + 6*x1 >= 41, "combined_mobility_rating")
m.addConstr(6*x0 - 4*x1 >= 0, "specific_linear_constraint")
m.addConstr(10*x0 + 4*x1 <= 55, "max_logistics_footprint")
m.addConstr(8*x0 + 10*x1 <= 69, "max_combined_logistical_capacity")
m.addConstr(6*x0 + 6*x1 <= 115, "max_combined_mobility_rating")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Airborne Infantry Companies: {x0.x}")
    print(f"Engineer Platoons: {x1.x}")
    print(f"Objective Function Value: {m.objVal}")
else:
    print("No optimal solution found")
```