#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
inline int add(int a, int b) {
  if ((a += b) >= mod) a -= mod;
  return a;
}
inline int mult(int a, int b) {
  long long t = 1ll * a * b;
  if (t >= mod) t %= mod;
  return t;
}
int K, f[33][33][2];
int main() {
  scanf("%d", &K);
  f[30][0][1] = 1;
  for (int i = 30; i > 0; i--) {
    for (int j = 0; j <= 30; j++) {
      f[i - 1][j][0] = add(f[i - 1][j][0], mult(f[i][j][0], 1 << j));
      f[i - 1][j + 1][0] = add(f[i - 1][j + 1][0], f[i][j][0]);
      int x;
      if (j)
        x = (1 << (j - 1));
      else
        x = 1;
      int y = x;
      if (!j) y = 0;
      if ((K >> (i - 1)) & 1) {
        f[i - 1][j][0] = add(f[i - 1][j][0], mult(x, f[i][j][1]));
        f[i - 1][j][1] = add(f[i - 1][j][1], mult(y, f[i][j][1]));
        f[i - 1][j + 1][1] = add(f[i - 1][j + 1][1], f[i][j][1]);
      } else {
        f[i - 1][j][1] = add(f[i - 1][j][1], mult(x, f[i][j][1]));
      }
    }
  }
  int ans = 0;
  for (int i = 0; i <= 30; i++) ans = add(ans, add(f[0][i][0], f[0][i][1]));
  printf("%d\n", ans);
  return 0;
}
