import java.util.*;

public class Euler43 {
    private static boolean runCheckpoints = true;

    private static boolean parseArguments(String[] args) {
        for (int i = 0; i < args.length; ++i) {
            String arg = args[i];
            if (arg.equals("--skip-checkpoints")) {
                runCheckpoints = false;
                continue;
            }
            System.err.println("Unknown argument: " + arg);
            return false;
        }
        return true;
    }

    private static boolean hasSubstringDivisibility(String s) {
        int[] divisors = {2, 3, 5, 7, 11, 13, 17};

        if (s.length() != 10) {
            return false;
        }
        if (s.charAt(0) == '0') {
            return false;
        }

        for (int i = 0; i < 7; ++i) {
            int value = (s.charAt(i + 1) - '0') * 100 +
                        (s.charAt(i + 2) - '0') * 10 +
                        (s.charAt(i + 3) - '0');
            if (value % divisors[i] != 0) {
                return false;
            }
        }

        return true;
    }

    private static long solve() {
        char[] digits = "0123456789".toCharArray();
        long total = 0;

        do {
            String perm = new String(digits);
            if (hasSubstringDivisibility(perm)) {
                total += Long.parseLong(perm);
            }
        } while (nextPermutation(digits));

        return total;
    }

    private static boolean nextPermutation(char[] array) {
        int i = array.length - 2;
        while (i >= 0 && array[i] >= array[i + 1]) {
            i--;
        }
        if (i < 0) {
            return false;
        }
        int j = array.length - 1;
        while (array[j] <= array[i]) {
            j--;
        }
        swap(array, i, j);
        reverse(array, i + 1);
        return true;
    }

    private static void swap(char[] array, int i, int j) {
        char temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    private static void reverse(char[] array, int start) {
        int end = array.length - 1;
        while (start < end) {
            swap(array, start++, end--);
        }
    }

    private static boolean runCheckpoints() {
        if (!hasSubstringDivisibility("1406357289")) {
            System.err.println("Checkpoint failed for 1406357289");
            return false;
        }
        if (hasSubstringDivisibility("1234567890")) {
            System.err.println("Checkpoint failed for invalid example");
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        if (!parseArguments(args)) {
            System.exit(1);
        }
        if (runCheckpoints && !runCheckpoints()) {
            System.exit(2);
        }

        System.out.println(solve());
    }
}
