#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using i3 = pair<int, ii>;
using li = pair<ll, int>;
using lii = pair<ll, ii>;
using vi = vector<int>;
using vl = vector<ll>;
using vli = vector<li>;
using vii = vector<ii>;
using vi3 = vector<i3>;
using vlii = vector<lii>;
const int N = 1e5 + 5;
const int INF = 1e9 + 7;
const double eps = 1e-12, PI = acos(-1);
int n, m;
char s[N];
int mem[N][5];
int dp(int i, int rem) {
  if (i == n) {
    return rem == 0 ? 0 : INF;
  }
  int &ret = mem[i][rem];
  if (ret != -1) return ret;
  return ret = min(1 + dp(i + 1, rem),
                   dp(i + 1, (rem * 10 + int(s[i] - '0')) % 3));
}
vi ans;
void path(int i, int rem) {
  if (i == n) return;
  if (dp(i + 1, (rem * 10 + int(s[i] - '0')) % 3) == dp(i, rem)) {
    ans.push_back(s[i] - '0');
    path(i + 1, (rem * 10 + int(s[i] - '0')) % 3);
    return;
  }
  path(i + 1, rem);
}
void solve(int cs) {
  scanf("%s", s);
  n = strlen(s);
  int mn = INF, idx = INF;
  bool isZero = 0;
  memset(mem, -1, sizeof mem);
  for (int i = 0; s[i]; i++) {
    if (s[i] == '0') {
      isZero = 1;
      continue;
    }
    int curr = dp(i + 1, int(s[i] - '0') % 3) + i;
    if (curr < mn) {
      mn = curr;
      idx = i;
    }
  }
  if (idx == INF) {
    printf("%d\n", isZero ? 0 : -1);
    return;
  }
  path(idx + 1, int(s[idx] - '0') % 3);
  printf("%c", s[idx]);
  for (int A : ans) printf("%d", A);
  printf("\n");
}
int main() {
  int t = 1;
  for (int cs = 1; t--; cs++) {
    solve(cs);
  }
  return 0;
}
