public class Euler899 {

    static long LFormula(long n) {
        long unordered = 0;
        for (int k = 1;; ++k) {
            long lo = 1L << (k - 1);
            if (lo > n || lo <= 0) {
                break;
            }
            long p = 1L << k;
            long hi;
            if (p <= 0) {
                hi = n;
            } else {
                hi = Math.min(n, p - 1);
            }
            long A = hi - lo + 1;
            long C = (p > 0) ? (n + 1) / p : 0;
            unordered += A * C;

            if (p <= 0)
                break;
        }

        long diagonal = 0;
        for (int k = 1;; ++k) {
            long x = (1L << k) - 1;
            if (x > n || x < 0) {
                break;
            }
            diagonal++;
        }

        return 2 * unordered - diagonal;
    }

    public static String solve() {
        long n = 1;
        for (int i = 0; i < 17; ++i) {
            n *= 7;
        }
        return Long.toString(LFormula(n));
    }

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