#include <bits/stdc++.h>
using namespace std;
long long MOD = 1000000007;
long long quickpow(long long a, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = (ans * a) % MOD;
    a = (a * a) % MOD;
    n >>= 1;
  }
  return ans;
}
const int SIZE = 35;
int N;
long long f[SIZE][SIZE] = {0}, g[SIZE][SIZE] = {0};
void add(long long &x, long long y) {
  y %= MOD;
  x += y, x %= MOD;
}
void work(void) {
  g[32][0] = 1;
  for (int i = 31; i >= 0; i--) {
    for (int j = 0; j <= 31; j++) {
      if (j > 0) add(f[i][j], f[i + 1][j - 1]);
      add(f[i][j], f[i + 1][j] * quickpow(2, j));
      if ((N >> i) & 1) {
        add(f[i][j], g[i + 1][j] * quickpow(2, max(j - 1, 0)));
      }
      if ((N >> i) & 1) {
        if (j > 0) add(g[i][j], g[i + 1][j - 1]);
        if (j > 0) add(g[i][j], g[i + 1][j] * quickpow(2, j - 1));
      } else {
        add(g[i][j], g[i + 1][j] * quickpow(2, max(j - 1, 0)));
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i <= 31; i++) add(ans, f[0][i] + g[0][i]);
  cout << ans << endl;
}
int main() {
  cin >> N;
  work();
  return 0;
}
