#include <bits/stdc++.h>
using namespace std;
long long modpow(long long b, long long e, long long mod) {
  long long ans = 1;
  for (; e; b = b * b % mod, e /= 2)
    if (e & 1) ans = ans * b % mod;
  return ans;
}
const int N = 100005;
string s;
int dp[N][3][2];
int go[N][3][2];
bool vis[N][3][2];
int solve(int x, int y, int z) {
  if (x == (int)(s).size()) {
    if (y == 0)
      return 0;
    else
      return -(N + 3);
  }
  if (vis[x][y][z]) return dp[x][y][z];
  vis[x][y][z] = true;
  if (z) {
    int a = solve(x + 1, y, z),
        b = solve(x + 1, (10 * y + (s[x] - '0')) % 3, z) + 1;
    if (a >= b) {
      go[x][y][z] = 0;
    } else {
      go[x][y][z] = 1;
    }
    dp[x][y][z] = max(a, b);
  } else {
    if (s[x] == '0') {
      go[x][y][z] = 0;
      dp[x][y][z] = solve(x + 1, y, z);
    } else {
      int a = solve(x + 1, y, z),
          b = solve(x + 1, (10 * y + (s[x] - '0')) % 3, 1) + 1;
      if (a >= b) {
        go[x][y][z] = 0;
      } else {
        go[x][y][z] = 1;
      }
      dp[x][y][z] = max(a, b);
    }
  }
  return dp[x][y][z];
}
string ans;
void recover(int x, int y, int z) {
  if (x == (int)(s).size()) {
    return;
  }
  if (go[x][y][z]) {
    ans.push_back(s[x]);
    recover(x + 1, (10 * y + (s[x] - '0')) % 3, 1);
  } else
    recover(x + 1, y, z);
}
int32_t main() {
  cin >> s;
  solve(0, 0, 0);
  recover(0, 0, 0);
  if ((int)(ans).size() == 0) {
    for (int i = 0; i < (int)(s).size(); i++) {
      if (s[i] == '0') {
        ans = "0";
        break;
      }
    }
  }
  if ((int)(ans).size() == 0)
    cout << -1 << endl;
  else
    cout << ans << endl;
}
