#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
long long f[32][32][2];
int n;
void add(long long &x, long long y) {
  x += y;
  if (x >= MOD) x -= MOD;
}
int main() {
  scanf("%d", &n);
  f[30][0][1] = 1;
  for (int i = 30; i > 0; i--)
    for (int j = 0; j <= 30; j++) {
      add(f[i - 1][j + 1][0], f[i][j][0]);
      add(f[i - 1][j][0], ((1LL) << j) * f[i][j][0] % MOD);
      long long x1 = j ? (1LL << (j - 1)) : 1, x0 = j ? (1LL << (j - 1)) : 0;
      if (n >> (i - 1) & 1) {
        add(f[i - 1][j + 1][1], f[i][j][1]);
        add(f[i - 1][j][0], x1 * f[i][j][1] % MOD);
        add(f[i - 1][j][1], x0 * f[i][j][1] % MOD);
      } else
        add(f[i - 1][j][1], x1 * f[i][j][1] % MOD);
    }
  long long ans = 0;
  for (int i = 0; i <= 30; i++) add(ans, f[0][i][0]), add(ans, f[0][i][1]);
  cout << ans << endl;
  return 0;
}
