public class Euler242 {
    static long[] pow3 = new long[65];
    static {
        pow3[0] = 1;
        for (int i = 1; i < 65; i++) {
            pow3[i] = pow3[i - 1] * 3;
        }
    }

    static long weightedPopcountPrefixSum(long n) {
        long result = 0;
        int onesSoFar = 0;

        for (int bit = 63; bit >= 0; --bit) {
            if (((n >> bit) & 1) == 0) {
                continue;
            }

            result += (1L << onesSoFar) * pow3[bit];
            onesSoFar++;
        }

        result += (1L << onesSoFar);
        return result;
    }

    public static String solve() {
        long limit = 1_000_000_000_000L;
        long mMax = (limit - 1) / 2;
        long tMax = mMax / 2;

        long ans = weightedPopcountPrefixSum(tMax);
        return String.valueOf(ans);
    }

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