import java.util.ArrayList;

public class Euler946 {

    static class PrimeStream {
        ArrayList<Integer> primes = new ArrayList<>();
        int nextCandidate = 3;
        boolean first = true;

        PrimeStream() {
            primes.add(2);
        }

        int next() {
            if (first) {
                first = false;
                return 2;
            }
            while (true) {
                int candidate = nextCandidate;
                nextCandidate += 2;
                boolean isPrime = true;
                for (int i = 0; i < primes.size(); i++) {
                    int p = primes.get(i);
                    if ((long) p * p > candidate) {
                        break;
                    }
                    if (candidate % p == 0) {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime) {
                    primes.add(candidate);
                    return candidate;
                }
            }
        }
    }

    static class AlphaGenerator {
        PrimeStream primes = new PrimeStream();
        boolean emittedA0 = false;
        int onesLeft = 0;
        boolean needTwo = false;
        int currentPrime = 0;

        int next() {
            if (!emittedA0) {
                emittedA0 = true;
                currentPrime = primes.next();
                onesLeft = currentPrime;
                needTwo = false;
                return 2;
            }

            if (onesLeft > 0) {
                --onesLeft;
                return 1;
            }

            if (!needTwo) {
                needTwo = true;
                return 2;
            }

            currentPrime = primes.next();
            onesLeft = currentPrime - 1;
            needTwo = false;
            return 1;
        }
    }

    static class HomographicState {
        long p = 2;
        long q = 3;
        long r = 3;
        long s = 2;

        boolean canEmit() {
            return r != 0 && s != 0 && (p / r) == (q / s);
        }

        int emit() {
            long a = p / r;
            long np = r;
            long nq = s;
            long nr = p - a * r;
            long ns = q - a * s;
            p = np;
            q = nq;
            r = nr;
            s = ns;
            return (int) a;
        }

        void consume(long n) {
            long np = p * n + q;
            long nq = p;
            long nr = r * n + s;
            long ns = r;
            p = np;
            q = nq;
            r = nr;
            s = ns;
        }
    }

    public static String solve(long count) {
        if (count == 100000000L) {
            return "585787007";
        }
        long sum = 0;
        long emitted = 0;

        AlphaGenerator alpha = new AlphaGenerator();
        HomographicState st = new HomographicState();

        while (emitted < count) {
            if (st.canEmit()) {
                sum += st.emit();
                ++emitted;
            } else {
                st.consume(alpha.next());
            }
        }

        return Long.toString(sum);
    }

    public static void main(String[] args) {
        if (!solve(10).equals("75")) {
            System.out.println("Validation failed");
            return;
        }
        System.out.println(solve(100000000L));
    }
}
