#include <bits/stdc++.h>
using namespace std;
const int N = 64;
const int mod = 1e9 + 7;
int n;
int f[N][N][2];
void Add(int &x, int y) { x = (x + y >= mod) ? (x + y - mod) : (x + y); }
int main() {
  scanf("%d", &n);
  int bit = 0;
  while ((1 << bit) <= n) ++bit;
  --bit;
  f[bit + 1][0][1] = 1;
  for (int i = bit; i >= 0; --i) {
    for (int j = 0; j <= bit - i + 1; ++j) {
      if (j) Add(f[i][j][0], f[i + 1][j - 1][0]);
      if (j && (n >> i & 1)) Add(f[i][j][1], f[i + 1][j - 1][1]);
      Add(f[i][j][0], 1LL * f[i + 1][j][0] * (1 << j) % mod);
      if (!j) {
        if (n >> i & 1)
          Add(f[i][j][0], f[i + 1][j][1]);
        else
          Add(f[i][j][1], f[i + 1][j][1]);
      } else {
        if (n >> i & 1)
          Add(f[i][j][0], 1LL * f[i + 1][j][1] * (1 << j - 1) % mod);
        else
          Add(f[i][j][1], 1LL * f[i + 1][j][1] * (1 << j - 1) % mod);
      }
      if (j && (n >> i & 1))
        Add(f[i][j][1], 1LL * f[i + 1][j][1] * (1 << j - 1) % mod);
    }
  }
  int ans = 0;
  for (int i = 0; i <= bit + 1; ++i) {
    Add(ans, f[0][i][0]);
    Add(ans, f[0][i][1]);
  }
  cout << ans % mod << endl;
}
