#include <bits/stdc++.h>
using std::bitset;
using std::cerr;
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::ios_base;
using std::iterator;
using std::map;
using std::max;
using std::max_element;
using std::min;
using std::min_element;
using std::multimap;
using std::multiset;
using std::pair;
using std::queue;
using std::reverse;
using std::set;
using std::sort;
using std::stable_sort;
using std::stack;
using std::string;
using std::swap;
using std::unique;
using std::vector;
namespace MySpace {
struct Small_Segment_Tree {
  vector<int> a;
  int l, r;

 private:
  int __summ(int L, int R, int l, int r, int v) {
    if (L <= l && r <= R) return a[v];
    if (R <= l || r <= L) return 0;
    int m = (l + r) / 2;
    return __summ(L, R, l, m, 2 * v + 1) + __summ(L, R, m, r, 2 * v + 2);
  }
  void __set(int P, int l, int r, int v, int V) {
    if (l + 1 == r) {
      a[v] = V;
      return;
    }
    int m = (l + r) / 2;
    if (P < m) {
      __set(P, l, m, 2 * v + 1, V);
      a[v] = a[2 * v + 1] + a[2 * v + 2];
    } else {
      __set(P, m, r, 2 * v + 2, V);
      a[v] = a[2 * v + 1] + a[2 * v + 2];
    }
  }

 public:
  int Summ(int L, int R) {
    if (R < L) return 0;
    return __summ(L, R + 1, l, r, 0);
  }
  void Set(int P, int V) { __set(P, l, r, 0, V); }
  Small_Segment_Tree(int _n) {
    a.resize(4 * _n);
    l = 0, r = _n;
  }
};
};  // namespace MySpace
using namespace MySpace;
signed main() {
  srand(time(NULL));
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  long long ans = 0, Cans = 0;
  cin >> n;
  for (int x = 0; x <= n; x++) {
    for (int s = 0; s <= n; s++) {
      for (int a = 0; a <= s; a++) {
        int b = s - a;
        if ((a ^ b) == x) {
          Cans++;
          break;
        }
      }
    }
  }
  for (int x = 0; x <= n; x++) {
    int d = 0;
    int cnt = 0;
    for (int j = 29; j >= 0; j--) {
      int y = (1 << j);
      if (x & y)
        d += y;
      else
        cnt++;
    }
    int unban = 0;
    for (int j = 29; j >= 0; j--) {
      int y = (1 << j);
      if ((x & y) == 0) {
        if (d + 2 * y <= n) {
          unban++;
          d += 2 * y;
          ans += (1 << (cnt - 1));
        }
        cnt--;
      }
    }
    ans++;
  }
  cout << ans;
}
