To solve this problem, we first need to define the variables and the objective function. Let's denote:
- $x$ as the number of all-inclusive tickets sold,
- $y$ as the number of regular tickets sold.

The objective is to maximize profit, given by $50x + 20y$, since each all-inclusive ticket generates a profit of $50 and each regular ticket generates a profit of $20.

We have several constraints:
1. **Capacity Constraint**: The total number of tickets sold cannot exceed 500 due to capacity constraints, so we have $x + y \leq 500$.
2. **All-Inclusive Reservation Constraint**: At least 100 all-inclusive tickets must be reserved, giving us $x \geq 100$.
3. **Preference Constraint**: Since at least 3 times as many people prefer regular tickets over all-inclusive tickets, we have $y \geq 3x$.

Given these constraints and the objective function, we can formulate this problem in Gurobi using Python:

```python
from gurobipy import *

# Create a model
m = Model("Amusement_Park_Ticket_Sales")

# Define variables
x = m.addVar(lb=0, vtype=GRB.INTEGER, name="all_inclusive_tickets")
y = m.addVar(lb=0, vtype=GRB.INTEGER, name="regular_tickets")

# Objective function: Maximize profit
m.setObjective(50*x + 20*y, GRB.MAXIMIZE)

# Constraints
m.addConstr(x + y <= 500, "capacity_constraint")  # Total tickets cannot exceed 500
m.addConstr(x >= 100, "all_inclusive_reservation")  # At least 100 all-inclusive tickets
m.addConstr(y >= 3*x, "preference_constraint")  # Preference for regular tickets

# Solve the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of all-inclusive tickets: {x.x}")
    print(f"Number of regular tickets: {y.x}")
    print(f"Maximum profit: ${50*x.x + 20*y.x:.2f}")
else:
    print("No optimal solution found. The model is infeasible.")
```