#include <bits/stdc++.h>
using namespace std;
int x;
int b[40];
int len;
inline void add(long long &x, long long y) { x = (x + y) % 1000000007; }
long long dp[40][40][2];
int main() {
  cin >> x;
  int i, j;
  if (!x) b[++len] = 0;
  while (x) {
    b[++len] = x & 1;
    x >>= 1;
  }
  reverse(b + 1, b + 1 + len);
  dp[0][0][1] = 1;
  for (i = 1; i <= len; i++) {
    for (j = 0; j <= i; j++) {
      if (!j) {
        dp[i][j][0] = 1;
        continue;
      }
      add(dp[i][j][0], dp[i - 1][j - 1][0]);
      add(dp[i][j][0], dp[i - 1][j][0] * (1 << j) % 1000000007);
      if (b[i]) add(dp[i][j][0], dp[i - 1][j][1] * (1 << j >> 1) % 1000000007);
      if (b[i]) {
        add(dp[i][j][1], dp[i - 1][j - 1][1]);
        add(dp[i][j][1], dp[i - 1][j][1] * (1 << j >> 1) % 1000000007);
      } else
        add(dp[i][j][1], dp[i - 1][j][1] * (1 << j >> 1) % 1000000007);
    }
  }
  long long ans = 0;
  for (i = 0; i <= len; i++) {
    add(ans, dp[len][i][1]);
    add(ans, dp[len][i][0]);
  }
  cout << ans << endl;
  return 0;
}
