```python
def tier_cost(units: int, allowance: int, first_rate: int, later_rate: int) -> int:
    """Calculate cost with tiered rates: first_rate up to allowance, later_rate beyond."""
    if units < 0:
        raise ValueError("units must be non-negative")
    if allowance < 0:
        raise ValueError("allowance must be non-negative")
    if first_rate < 0 or later_rate < 0:
        raise ValueError("rates must be non-negative")

    cost = units * first_rate
    if units > allowance:
        cost += (units - allowance) * later_rate
    return cost
```