#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i = 0; i < int(n); ++i)
#define REPE(i, a, b) for (int i = (a); i <= int(b); ++i)
using LL = long long;

const LL mod = 1e9 + 7;

map<LL, LL> d;

LL f(LL x) {
  if (x <= 1) return x;
  if (d.count(x)) return d[x];
  LL y = (x - 1) / 2;
  LL a = f(y);
  LL b = f(y + 1);
  LL ret;
  if (x & 1) {
    ret = (a * 3 + (b - a)) % mod;
    if (ret < 0) ret += mod;
  } else {
    ret = (a * 3 + (b - a) * 2) % mod;
    if (ret < 0) ret += mod;
  }
  return d[x] = ret;
}

int main() {
  LL n;
  cin >> n;
  cout << f(n + 1) << endl;
  return 0;
}

