```python
def tier_cost(units: int, allowance: int, first_rate: int, later_rate: int) -> int:
    if units < 0:
        raise ValueError("Number of units must be non-negative.")
    
    if allowance < 0:
        allowance = 0
    
    if units == 0:
        return 0
    
    if units == allowance:
        return first_rate * units
    
    if units < allowance:
        return first_rate * units + later_rate * (units - allowance)
    
    return first_rate * units + later_rate * (allowance - units)
```