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