# 前処理. MAX_BIT = 30 U = [2*(pow(4,k)-1)//3 for k in range(MAX_BIT + 1)] def h(n, v): if n == 0: return 0 m = n - 1 memo = {} def dfs(d, fx, fy): if d == -1: return 1 st = (d, fx, fy) if st in memo: return memo[st] res = 0 bm = (m >> d) & 1 bv = (v >> d) & 1 for bx in (0, 1): for by in (0, 1): if fx == 0 and bx > bm: continue if fy == 0 and by > bm: continue ok = 0 if d & 1: if (bx | by) == bv: ok = 1 else: if (bx & by) == bv: ok = 1 if ok: res += dfs(d-1, fx or (bx < bm), fy or (by < bm)) memo[st] = res return res return dfs(30, 0, 0) N = int(input()) ans = 0 left = 1 for k in range(1, MAX_BIT + 1): l = left r = N+1 # g(n) = U[k]となる境界nを探す. while r-l > 1: mid = (l+r)//2 if h(mid, U[k - 1]) >= h(mid, U[k]): l = mid else: r = mid ans += (r-left)*U[k-1] left = r print(ans)