Depends what you plan to do with.
Personally I would suggest grabbing the Quake2 Source and Ogre3D.
The idea would not to use Ogre3D, but to see how it cross-platforms. Although the design is overly bulky, you cna slim it down to your needs.
Quake2 if you can get past Carmacks coding style is one of the best engine designs. Obviously it's extremely old now, but the modular design makes it very versitile. It is also very easy to understand what does what.
This is a key element if you ever hope to fix and alter an engine.
All of the third party engines are quite complex behind the scenes. Mainly this is to make sure they can adapt to any situation, but if your building the engine up yourself you don't need most of that stuff, just the concepts behind how it works.
A common mistake is to think that Quake2 is purely for FPS games. Although it's true that's it's original design and useage, it is quite a flexible engine when you get into it.
Some alterations to the formats and you can quickly, as well as easily enhance it with some more modern updates.
ODE is a very good Physics Engine that isn't overly complex (or large) which again can be extended and integrated fairly easily.
With all of these things however I'd recommend using them as templates to build your own engine rather than build up from them as a base.
Engines are pretty simple to create and extend once you have the initial aspect of communication and pipelines setup.
The features themselves often can be added as and when you understand how. Making sure there is a strong system for passing messages and setting up the pipelines for Sound, Networking, Graphics, etc. is key.
DirectX in this case can help you to do this too. Not as an API but in it's design. Everything in DirectX now is setup to be flexible and extendable using flag systems to declare what data to expect. Creating a similar system for your engine can help you to extend things without even needing to touch other areas.
Again this is part of a modular design, which on the whole provides you with a much easier time debugging as you can test everything seperately or together.
The best part of making you own engine has to be the fact that you know EXACTLY how it works.