public class Euler228 {
    static int[] computeTotients(int limit) {
        int[] phi = new int[limit + 1];
        for (int i = 0; i <= limit; ++i) {
            phi[i] = i;
        }
        for (int p = 2; p <= limit; ++p) {
            if (phi[p] != p)
                continue;
            for (int k = p; k <= limit; k += p) {
                phi[k] -= phi[k] / p;
            }
        }
        return phi;
    }

    public static String solve() {
        int fromN = 1864;
        int toN = 1909;

        int[] phi = computeTotients(toN);
        byte[] denominatorUsed = new byte[toN + 1];

        for (int n = fromN; n <= toN; ++n) {
            for (int d = 1; (long) d * d <= n; ++d) {
                if (n % d != 0)
                    continue;
                denominatorUsed[d] = 1;
                denominatorUsed[n / d] = 1;
            }
        }

        long sides = 0;
        for (int d = 1; d <= toN; ++d) {
            if (denominatorUsed[d] != 0) {
                sides += phi[d];
            }
        }

        return String.valueOf(sides);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
