The good practice is to declare the (non-member) operators in the same namespace as the class whose interface they belong to.
For something like operator+, this is rather easy: It operates only on Foo objects, so it should go in the same namespace as Foo itself.
For operator<< and operator>>, you could still chose between namespaces std and bar. First of all, you are not supposed to add function/operator overloads to namespace std. And secondly, the important part of these overloads is not that they work with a stream, but that they read/write a Foo object. So it makes more sense to bundle it with the Foo class.
It should also be noted that the rules of C++ are designed such that overloaded operators that are defined in the same namespace as the class they operate on, will almost always be correctly found, while this will go wrong much more often if the operators are declared in some other, unrelated, namespace.