#include <bits/stdc++.h>
using namespace std;
const long long M = 1000000007;
long long n;
map<long long, long long> mp;
long long f(long long x) {
  if (__builtin_popcount(x) == 1) return 1;
  if (mp.find(x) != mp.end()) return mp[x];
  long long t;
  for (t = 1; t <= x; t <<= 1)
    ;
  t /= 2;
  if (x > 3 * t / 2) x = 3 * t - x;
  return mp[x] = f(x - t) + f(x - t / 2);
}
long long g(long long x) {
  if (x == 1) return 2;
  return (3 * g(x / 2) - (2 - (x & 1)) * f(x / 2 + 1) + M) % M;
}
int main() {
  scanf("%lld", &n);
  printf("%lld\n", g(n));
}
