public class Euler316 {
    static long[] buildPow10() {
        long[] pow10 = new long[20];
        pow10[0] = 1;
        for (int i = 1; i < 20; ++i) {
            pow10[i] = pow10[i - 1] * 10L;
        }
        return pow10;
    }

    static long gValue(long n, long[] pow10) {
        String s = String.valueOf(n);
        int d = s.length();

        int[] pi = new int[d];
        for (int i = 1; i < d; ++i) {
            int j = pi[i - 1];
            while (j > 0 && s.charAt(i) != s.charAt(j)) {
                j = pi[j - 1];
            }
            if (s.charAt(i) == s.charAt(j)) {
                j++;
            }
            pi[i] = j;
        }

        long expectedEnd = 0;
        for (int len = d; len > 0; len = pi[len - 1]) {
            expectedEnd += pow10[len];
        }

        return expectedEnd - d + 1;
    }

    public static String solve() {
        long[] pow10 = buildPow10();
        long numerator = 10000000000000000L;
        long maxN = 999999L;

        long total = 0;
        for (long n = 2; n <= maxN; ++n) {
            total += gValue(numerator / n, pow10);
        }

        return String.valueOf(total);
    }

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