public class Euler1 {
    static long sumOfMultiplesBelow(long limit, long divisor) {
        long n = (limit - 1) / divisor;
        return divisor * n * (n + 1) / 2;
    }

    static long solve(long limit) {
        if (limit == 0) return 0;
        return sumOfMultiplesBelow(limit, 3)
             + sumOfMultiplesBelow(limit, 5)
             - sumOfMultiplesBelow(limit, 15);
    }

    public static void main(String[] args) {
        assert solve(10) == 23 : "Checkpoint failed for limit=10";
        System.out.println(solve(1000));
    }
}
